package com.example.yunbiji0314.util;

import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;

/**
 * 全局异常处理
 * 只要是controller 类 出现异常 都会走这个类
 */
@ControllerAdvice
//将Result格式化成json字符串
@ResponseBody
public class MyExceptionHandler {
    /**
     * 捕获所有异常
     * 不管是何种异常 都是Exception类的子类
     * @param e
     * @return
     */
//    @ExceptionHandler(Exception.class)
//    public Result aa(Exception e) {
//        e.printStackTrace(); //打印异常信息
//        return new Result(Code.NULL_ERR, "系统繁忙，请稍后再试");
//    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Result yichang(MethodArgumentNotValidException e){
        //拿到我们校验失败的异常信息
        HashMap<String, String> map = new HashMap<>();
        //将读取到的异常信息存放在map这个集合中
        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
        for (FieldError fieldError : fieldErrors){
            map.put(fieldError.getField(),fieldError.getDefaultMessage());
        }
        e.printStackTrace();
        return new Result(Code.NULL_ERR,map,"校验失败");
    }
}
